package middleware

import (
	"github.com/gin-gonic/gin"
	"jiaqin/common"
	"jiaqin/model"
	"net/http"
	"strings"
)
// 用来认证的中间件
func AuthMiddleware()gin.HandlerFunc  { //返回一个gin.HandlerFunc
	return func(ctx *gin.Context) {
		//获取Authorization header （授权的头部）
		tokenString := ctx.GetHeader("Authorization")
		//验证格式
		if tokenString=="" ||!strings.HasPrefix(tokenString,"Bearer"){
			ctx.JSON(http.StatusUnauthorized,gin.H{"code":401,"msg":"权限不足"})
			ctx.Abort()
			return
		}

		tokenString = tokenString[7:] //除去Bearer之后进行截取
		//解析token
		token,claims,err:=common.ParseToken(tokenString)
		if err!=nil || !token.Valid{
			ctx.JSON(http.StatusUnauthorized,gin.H{"code":401,"msg":"权限不足2"})
			ctx.Abort()
			return
		}
		//否则证明token通过验证，获取UserID
		userId := claims.UserID
		DB:=common.GetDB()
		var user model.User
		DB.First(&user,userId)

		// 如果用户不存在
		if user.ID==0{
			ctx.JSON(http.StatusUnauthorized,gin.H{"code":401,"msg":"权限不足3"})
			ctx.Abort()
			return
		}
		// 如果存在，将user信息写入上下文
		ctx.Set("user",user)
		ctx.Next()
	}
}

